package com.pattern.strategy.comparable;

public class MySorter {

//    public static void sort(int[] arr) {
//        for (int i = 0; i < arr.length; i++) {
//            int minPos = i;
//            for (int j = i+1; j < arr.length; j++) {
//                minPos = arr[j] < arr[minPos] ? j : minPos;
//            }
//
//            swap(arr, i, minPos);
//        }
//    }
//
//    static void swap(int[] arr, int i, int j){
//        int temp = arr[i];
//        arr[i] = arr[j];
//        arr[j] = temp;
//    }


//    public static void sort(Cat[] arr) {
//        for (int i = 0; i < arr.length; i++) {
//            int minPos = i;
//            for (int j = i+1; j < arr.length; j++) {
//                minPos = arr[j].compareTo(arr[minPos]) == -1 ? j : minPos;
//            }
//
//            swap(arr, i, minPos);
//        }
//    }
//
//    static void swap(Cat[] arr, int i, int j){
//        Cat temp = arr[i];
//        arr[i] = arr[j];
//        arr[j] = temp;
//    }

    // 以上内容存在的问题：
    // 如果你需要对其他类型排序，那么就要写很多sort重载方法
    // 还有一种思路是传入的对象用Object 但是Object中没有compareTo方法啊 所以不行 ！！！！！！！！！！

    // 以下： 解决方法

    /**
     * 将传入的数组改为Comarable 接口  如果某个类需要排序 那么请实现该接口即可
     * Comparable中有个方法CompareTo  实现该类必须实现该方法
     */
    public static void sort(MyComparable[] arr) {
        for (int i = 0; i < arr.length; i++) {
            int minPos = i;
            for (int j = i+1; j < arr.length; j++) {
                minPos = arr[j].compareTo(arr[minPos]) == -1 ? j : minPos;
            }

            swap(arr, i, minPos);
        }
    }

    static void swap(MyComparable[] arr, int i, int j){
        MyComparable temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

}
